import { createSSRApp } from 'vue'
import { createPinia } from 'pinia'
import { createUnistorage } from 'pinia-plugin-unistorage'
import { createStore } from '@/store/' // 引入状态
// 自己写的持久化插件
// import {persistence} from "@/store/plugins/persistence"
import App from './App.vue'

import axios from '@/api/uAxios'
import defineConfig from '@/api/config'

// 全局请求配置 - 如果局部与全局有同名属性，则后面的属性会覆盖前面的属性，相当于Object.assign(全局，局部)
axios.setConfig(config => {
	config.baseURL = defineConfig.BASEURL
	config.header = { g2: 'g2' }
	return config
})

// 请求拦截
axios.interceptors.request.use(config => {
	config.header = {
		...config.header,
		pgh: '168168168'
	}
	return config
})

// 请求拦截
const index = axios.interceptors.request.use(config => {
	config.header = {
		...config.header,
		pgh2: '168168168'
	}
	return config
})

// 取消请求拦截
axios.interceptors.request.eject(index)

// 响应拦截
const index2 = axios.interceptors.response.use(
	res => {
		if (typeof res.data === 'object' && res.data !== null) {
			const data = res.data as AnyObject
			data.code = 0
		}
		return res
	},
	err => {
		/*  对响应错误做点什么 （statusCode !== 200）*/

		uni.showToast({ title: 'err' })
		return err
	}
)
// 取消响应拦截
// axios.interceptors.response.eject(index2)

export function createApp() {
	const app = createSSRApp(App)
	const pinia = createPinia()
	// 使用持久化插件
	pinia.use(createUnistorage())
	// 自己写的持久化插件
	// pinia.use(persistence)
	app.use(pinia)
	// 全局注册Store
	createStore()
	return {
		app
	}
}
